#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>

// 回调函数：打印查询结果（格式：列名: 值）
int rscallback(void *p, int argc, char **argv, char **col_names) {
    int *empty_flag = (int *)p;
    *empty_flag = 0;  // 标记表非空

    // 打印列名和值（格式：列名: 值）
    for (int i = 0; i < argc; i++) {
        // 列名首字母大写（简单示例，实际需根据需求调整）
        if (i > 0) printf(", ");
        printf("%s: %s", col_names[i], argv[i] ? argv[i] : "NULL");
    }
    putchar('\n');

    return 0;
}

int main(void) {
    sqlite3 *db;
    char *err_msg = NULL;
    int ret;
    int empty = 1;  // 标记表是否为空

    // 打开数据库
    ret = sqlite3_open("./test.db", &db);
    if (ret != SQLITE_OK) {
        fprintf(stderr, "[错误] 数据库打开失败: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        exit(1);
    }

    // 执行查询
    ret = sqlite3_exec(db, "SELECT * FROM person;", rscallback, &empty, &err_msg);
    if (ret != SQLITE_OK) {
        fprintf(stderr, "[错误] SQL执行失败: %s\n", err_msg);
        sqlite3_free(err_msg);
        sqlite3_close(db);
        exit(1);
    }

    // 检查表是否为空
    if (empty) {
        fprintf(stderr, "[提示] 表 person 为空\n");
        sqlite3_close(db);
        exit(1);
    }

    // 关闭数据库
    sqlite3_close(db);
    return 0;
}
